#include "graph.h"
#include<bits/stdc++.h>
using namespace std;
int n,a[1009],fa[209],d[209],mm[209],f[209][209],g[209][209],h[209][209],k[209][209];
void dfs(int x,int y){
    int z=LastRoad();
    if(Color()==2){
        h[x][y]=3;
        Move(z,2);
        return;
    }
    else if(Color()==3){
        h[x][y]=4;
        Move(z,3);
        return;
    }
    g[x][y]=++n;
    int nw=n;
//    dep[nw]=dep[x]+1;
//    sz[nw]=1;
    if(nw!=1)g[nw][z]=x;
    fa[nw]=z;
    h[x][y]=1;
    if(nw!=1)h[nw][z]=2;
    f[x][nw]=f[nw][x]=1;
    d[nw]=NumberOfRoads();
    for(int i=1;i<=d[nw];i++){
        if(i!=z){
            Move(i,2);
            dfs(nw,i);
//            sz[nw]+=sz[g[nw][i]];
        }
    }
    if(nw!=1)Move(z,3);
}
void dfss(int x){
    for(int i=1;i<=n;i++)mm[i]=0;
    for(int i=1;i<=d[x];i++){
        if(h[x][i]==3){
            Move(i,3);
            mm[LastRoad()]=1;
            Move(LastRoad(),2);
        }
    }
    if(k[x][3]){
        int nw=x;
        Move(fa[nw],1);
        nw=g[nw][fa[nw]];
        if(Color()==2){
            f[nw][x]=f[x][nw]=1;
            k[x][3]--;
        }
        while(k[x][3]){
            Move(fa[nw],3);
            nw=g[nw][fa[nw]];
            if(Color()==2){
                f[nw][x]=f[x][nw]=1;
                k[x][3]--;
            }
        }
        for(int i=1;i<=d[nw];i++){
            if(mm[i]&&h[nw][i]==4){
                Move(i,3);
                if(Color()==1)break;
                else Move(LastRoad(),3);
            }
        }
    }
    for(int i=1;i<=d[x];i++){
        if(h[x][i]==1){
            Move(i,3);
            dfss(g[x][i]);
        }
    }
    if(x!=1)Move(fa[x],3);
}
void Inspect(int R) {
    memset(f,0x3f,sizeof(f));
    dfs(0,0);
    for(int i=1;i<=n;i++){
        f[i][i]=0;
        for(int j=1;j<=d[i];j++){
            k[i][h[i][j]]++;
        }
    }
    dfss(1);
    for(int l=1;l<=n;l++){
        for(int i=1;i<=n;i++){
            for(int j=1;j<=n;j++){
                f[i][j]=min(f[i][j],f[i][l]+f[l][j]);
            }
        }
    }
    for(int i=1;i<=n;i++){
        for(int j=i+1;j<=n;j++){
            a[f[i][j]]++;
        }
    }
    for(int i=1;i<=R;i++){
        Answer(i,a[i]);
    }
    return;
}
